package com.XML.Dom4J;

import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.junit.Test;

import java.io.InputStream;
import java.util.List;


/**
 * 目标：学会使用Dom4J解析XML文件中的数据
 * 1.导入Dom4J的jar包
 * 2.准备一个XML文件
 */

public class Dom4JHelloWordDemo1 {
    @Test
    public void ParseXMLData() throws Exception {
        //1.创建一个dom4j解析器，代表整个dom4j框架
        SAXReader saxReader=new SAXReader();
        //2.把XML文件加载到内存中成为一个document对象，代表整个XML文件
        //通过文件去读取XML文件
        //Document read = saxReader.read(new File("D:\\code\\weixin\\app\\src\\com\\XML\\Dom4J\\Contacts.xml"));//绝对路径
        //使用类路径
        InputStream resourceAsStream = Dom4JHelloWordDemo1.class.getResourceAsStream("/Contacts.xml");
        Document read = saxReader.read(resourceAsStream);

        //3.获取根元素对象
        Element root = read.getRootElement();
        System.out.println(root.getName());

        //4.获取根元素下面所有元素(一级)
        List<Element> elements = root.elements();
        for (Element element : elements) {
//            System.out.println(element.getStringValue());
        }

        //4.获取根元素下面某个元素的全部元素(一级)
        List<Element> contact = root.elements("contact");


        //5.获取根元素下面某个元素(一级)：默认拿第一个元素
        Element contact1 = root.element("contact");
        //获取contact1中name值
        System.out.println(contact1.getName());


        //6.获取子元素的文本内容
        System.out.println(contact1.elementText("name"));
        System.out.println(contact1.elementText("gender"));
        //7.去掉文本内容的空格
        System.out.println(contact1.elementTextTrim("name"));

        //8.根据元素获得属性值，先要获得属性对象   :<contact id="1" vip="true">
        Attribute id = contact1.attribute("id");
        System.out.println(id.getName()+"---->"+id.getValue());
        Attribute gender = contact1.attribute("vip");
        System.out.println(gender.getName()+"---->"+gender.getValue());
        //id---->1
        //vip---->true

        //9.直接提取属性值
        System.out.println(contact1.attributeValue("id"));
        System.out.println(contact1.attributeValue("vip"));
        //1
        //true


    }

}
